// 为了方便大家理解和记忆中间件的使用，Express 官方把常见的中间件用法，分成了5大类，分别是:
// ①应用级别的中间件
// ②路由极别的中间件
// ③错误级别的中间件
// ④Express 内置的中间件
// ⑤第三方的中间件


// 1.应用级别的中间件
// 通过app.use()或app.get()或app.post(),绑定到app实例上的中间件，叫做应用级别的中间件，代码示例如下: 
//应用服别的中间件(全局中间件)
// app.use((req, res, next) => {
//     next()
//     })
//1应用服别的中间件(局部中间件)
// app.get('/'.mw, (req, res) => {
//     res.send('Home page.')
// })

// 2.路由级别的中间件
// 绑定到express.Router()实例上的中间件.叫做路由级别的中间件。它的用法和应用级别中间件没有任何区别。只不
// 过，应用级别中间件是绑定到app实例上,路由级别中间件绑定到router实例上,代码示例如下: 

// var app=express()
// var router=express.Router()
//路由级别的中间件
// router.use(function (req, res, next) {
//     console.log('Time:', Date.now())
//     next()
// })
// app.use('/', router)


// 3.错误级别的中间件
// 错误级别中间件的作用:专门用来捕获整个项目中发生的异常错误，从而防止项目异常崩溃的问题。
// 格式:错误级别中间件的function处理函数中，必须有4个形参,形参顺序从前到后，分别是(err, req, res, next)。
// app.get('/', function (req, res) {//1.路由
//     throw new Error('服务器内部发生了错误!') //1.1抛出一个自定义的错误
//     res.send('Home Page')
// })
// app.use(function (err, req, res, next) { //2.错误级别的中间件
//     console.log('发生了错误:' + err.message)// 2.1在服务器打印错误
//     res.send('Error!' + err.nessage)
//     //2.2向客户瑞应错误相关的内容
// })
// 注意:错误级别的中间件,必须注册在所有路由之后!

// 4. Express内置的中间件
// 自Express 4.16.0版本开始，Express 内置了3个常用的中间件，极大的提高了Express项目的开发效率和体验:
// ①express.static快速托管静态资源的内置中间件，例如: HTML文件、图片、CSsS样式等(无兼容性)
// ②express.json解析JSON格式的请求体数据(有兼容性，仅在4.16.0+版本中可用)
// ③express.urlencoded解析URL-encoded格式的请求体数据(有兼容性，仅在4.16.0+版本中可用)
//配置解析application/json 格式数据的内置中问件
// app.use(express.json())
//配置解析application/x-www-form-urlencoded 格式数据的内置中间件
// app.use( express.urlencoded({ extended: false }))

// // 导入express
// const express = require('express')
// // 创建web服务器实例
// const app = express()
// app.use(express.json())//配置解析application/json 格式数据的内置中问件
// app.use( express.urlencoded({ extended: false }))
// app.post('/user', (req, res) => {
//     //在服务器，可以使用req.body 这个属性，来接收客户端发送过来的请求体数据
//     // 默认情况下，如果不配置解析表单数据的中间件即app.use(express.json())，则req.body默认等于undefined
//     console.log(req.body);
//     res.send(req.body)
//     // 在postman body---raw---json---{"name":"李文清","age":20}
// })
// app.post('/book', (req, res) => {
//     //在服务器，可以使用req.body 这个属性，来接收客户端发送过来的请求体数据
//     // 默认情况下，如果不配置解析URL-encoded格式的请求体数据的中间件即app.use( express.urlencoded({ extended: false }))，则req.body默认等于{}
//     console.log(req.body);
//     res.send(req.body)
//     // 在postman body---x-www-form-urlencoded
// })
// // 启动服务器
// app.listen(8080, () => {
//     console.log('express is running at http://127.0.0.1:8080');
// })



// 5.第三方的中间件
// 非Express言方内置的，而是由第三方开发出来的中间件，叫做第三方中间件。在项目中，大家可以按需下载并配置第三方中间件，从而提高项目的开发效率。
// 例如:在express@4.16.0之前的版本中，经常使用body-parser这个第三方中间件，来解析请求体数据。使用步骤如下:
// ①运行npm install body-parser安装中间件
// ②使用require导入中间件
// ③调用app.use()注册并使用中间件

// 导入express
const express = require('express')
const parser = require('body-parser') // 导入第三方中间件
// 创建web服务器实例
const app = express()
app.use(parser.urlencoded({ extended: false })) // 注册中间件
app.post('/yyy', (req, res) => {
    //在服务器，可以使用req.body 这个属性，来接收客户端发送过来的请求体数据
    // 默认情况下，如果不配置解析表单数据的中间件则req.body默认等于undefined
    console.log(req.body);
    res.send(req.body)
})
// 启动服务器
app.listen(8080, () => {
    console.log('express is running at http://127.0.0.1:8080');
})